package com.htt.bms.common.exception;

import com.htt.bms.common.WrapMapper;
import com.htt.bms.common.Wrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * @author 侯婷婷
 * @version 1.0
 * @description
 */
@Slf4j
@RestControllerAdvice
public class ExceptionHaandle {

    /**
     * 统一异常处理方法，处理所有异常
     * @param e
     * @return
     */
    @ExceptionHandler(value = Exception.class)
    public Wrapper handleException(Exception e){
        if(e instanceof BusinessException){
            BusinessException be = (BusinessException) e;
            log.error("系统自定义业务异常：{}", be.getMessage());
            return WrapMapper.wrap(be.getCode(),be.getMessage(),null);
        } else if (e instanceof MethodArgumentNotValidException) {
            MethodArgumentNotValidException me = (MethodArgumentNotValidException) e;
            log.error("参数校验异常：{}",me.getBindingResult().getFieldError().getDefaultMessage());
            return WrapMapper.wrap(Wrapper.ILLEGAL_ARGUMENT_CODE_,"参数有误"+me.getBindingResult().getFieldError().getDefaultMessage(),null);
        } else {
            log.error("统一系统异常：{}",e);
            return WrapMapper.wrap(Wrapper.ERROR_CODE,Wrapper.ERROR_MESSAGE,null);
        }
    }


}
